package busterminalweb.action.bus;

import busterminal.entity.Bus;
import busterminal.exception.BusinessException;
import busterminal.persistence.BusDAO;
import busterminal.services.ServiceLocator;
import busterminalweb.action.Action;
import busterminalweb.action.ActionResult;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Поиск автобусов по году начала эксплуатации
 */
public class FindBusByStartYearOfExploitationAction implements Action {

    /**
     * Регулярное выражение для проверки корректности ввода года в формате YYYY
     */
    private static final String CORRECT_YEAR_FORMAT = "^(\\d{4})$";

    /**
     * Выполнить действие
     * @param request запрос
     * @param response ответ
     * @return страница, которой нужно передать управление
     */
    @Override
    public ActionResult execute(HttpServletRequest request, HttpServletResponse response) {
        if (request.getParameter("startYearOfExploitation").trim().matches(CORRECT_YEAR_FORMAT)) {
            List<Bus> busList = ServiceLocator.getService(BusDAO.class).findByStartYearOfExploitation(Integer.parseInt(request.getParameter("startYearOfExploitation")));
            request.setAttribute("busList", busList);       
        } else {
            throw new BusinessException("Incorrect start year of exploitation: '" + request.getParameter("startYearOfExploitation").trim() + "'");
        }
        
        return ActionResult.forward("bus/BusListView.jsp"); 
    }

    /**
     * Получить имя действия
     * @return имя действия
     */
    @Override
    public String getName() {
        return "bus.find.by.start.year.of.exploitation";
    }
}
